<?php
/**
 * Ресурс приложения, инициализирующий пользовательскую сессию и данные о пользователе
 * 
 * @category Phorm
 * @package Application_Resource
 * @name /Phorm/Application/Resource/Usersession.php
 * @copyright phorm.ru
 * @since 06.01.2011
 * @author vladimir@kachalov.net
 */

class Phorm_Application_Resource_Usersession extends Zend_Application_Resource_ResourceAbstract {
	
	/**
	 * Объект пользовательской сессии
	 * @var Zend_Session
	 */
	public $_usersession;
	
	/**
	 * Инициализация пользовательской сессии
	 *
	 * @return Zend_Session
	 */
	
	public function init() {
		
		$this->_bootstrap->bootstrap('Db');

		$this->_usersession = new Zend_Session_Namespace('UserSession');
		$this->_usersession->UserData = $this->getCurrentUserInfo();
		
		date_default_timezone_set($this->_usersession->UserData['timezone']);
		
		return $this->_usersession;
		
	}
	
	
	/**
	 * Возвращает информацию о текущем пользователе
	 * 
	 * @return array
	 */
	
	public function getCurrentUserInfo() {
		
		$User = new Phorm_User($this->_bootstrap);
		
		$token = $this->_bootstrap->getResource('Request')->getCookie('token');
		
		/**
		 * Проверяем негостевые данные в сессии
		 */
		
		if(isset($this->_usersession->UserData) && $this->_usersession->UserData['userid']>0) {
			
			return $this->_usersession->UserData;
			
		/**
		 * Проверяем токен в куках
		 */
			
		} elseif ($token && $UserData = $User->getUserInfo(array('tokenauth'=>$token))) {
			
			$User->saveUserInfo(array('userid'=>$UserData['userid'],'lastvisit'=>time(),'lastip'=>$this->_request->getClientIp()));
			
			return $UserData;
			
		/**
		 * Гостевые данные из существующий сессии
		 */
		
		} elseif(isset($this->_usersession->UserData)) {
			
			return $this->_usersession->UserData;
		
		/**
		 * Гостевые данные при новой сессии без токена
		 */
			
		} else {
			
			return $User->getUserInfo(array('userid'=>0));
			
		}
		
	}
	
}